#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
//	int sum = 0, k = 0, n = 0, i = 0, j = 0, m = 0;//m计算加了几次
//	scanf("%d", &k);
//	for (i = 1; i <=k; i++)
//	{
//		for (j = 1; j <= i; j++)
//		{
//			sum += i;
//			m++;
//			if (m == k)//跳出内循环
//				break;
//		}
//		if (m == k)//跳出外循环
//			break;
//	}
//	printf("%d\n", sum);
//	return 0;
//}
//int main()
//{
//	int i = 0, n = 0,sum=0,m=1,k=0;
//	scanf("%d", &n);
//	int arr[6] = { 0 },j=0;
//	for (i = 1; i <= n; i++)
//	{
//		//1-n的数
//		j = 5,m=i ;
//		while (m != 0)
//			{
//			    //把i的各位按个十百千万倒序放在arr[6]中
//				arr[j--] = m % 10;
//				m /= 10;
//			}
//		for (j=0; j<6; j++)
//		{
//			//计算出i的逆序数
//			m = 1;
//			for (k = 0; k < j; k++)
//			{
//				if(arr[k]!=0)
//                      m *= 10;
//			}
//			sum += arr[j] * m;//arr[0]*10^0+arr[1]*10^1+...+arr[5]+10^5
//			//arr[j]使用完后不用清零，因为后续arr[j]的位置会被新的值覆盖掉
//		}
//		if (sum == i )
//			printf("%d\n", i);
//        sum = 0;
//	}
//	return 0;
//}
int main()
{
	int n = 0, m = 0, sum = 0, i = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		m = i;
		sum = 0;
		while (m != 0)
		{
			sum += sum * 10 + m % 10;
			m /= 10;
		}
		if (sum == i)
			printf("%d\n", i);
	}
	return 0;
}